package com.dev.widget.util.widget;



import com.dev.DevUtils;
import dev.widget.ResourceTable;
import ohos.agp.components.Attr;
import ohos.agp.components.AttrSet;
import ohos.app.Context;
import ohos.global.resource.NotExistException;
import ohos.global.resource.WrongTypeException;

import java.io.IOException;
import java.util.Optional;

public class WidgetAttrs {

    // 是否允许滑动
    private boolean mIsSlide   = true;
    // 最大显示宽度
    private int     mMaxWidth  = WidgetUtils.DEF_VALUE;
    // 最大显示高度
    private int     mMaxHeight = WidgetUtils.DEF_VALUE;


    /**
     * 初始化
     * @param context {@link Context}
     * @param attrs   {@link AttrSet}
     */
    public WidgetAttrs(
            Context context,
            AttrSet attrs
    ) throws NotExistException, WrongTypeException, IOException {
        if (context != null && attrs != null) {
            mIsSlide = getBoolean(attrs.getAttr(DevUtils.getContext().getResourceManager().getElement(ResourceTable.String_dev_slide).getString()), true);
            mMaxWidth = getLayoutDimension(attrs.getAttr(DevUtils.getContext().getResourceManager().getElement(ResourceTable.String_dev_maxWidth).getString()), WidgetUtils.DEF_VALUE);
            mMaxHeight = getLayoutDimension(attrs.getAttr(DevUtils.getContext().getResourceManager().getElement(ResourceTable.String_dev_maxHeight).getString()), WidgetUtils.DEF_VALUE);
        }
    }
    private Boolean getBoolean(Optional<Attr> attr, boolean defaultValue) throws NotExistException, WrongTypeException, IOException {
        //isPresent = false 表示不存在返回默认  = true 表示有输入，使用输入的数据为
        if (attr.isPresent()) {
            return attr.get().getBoolValue();
        } else {
            return defaultValue;
        }
    }

    private int getLayoutDimension(Optional<Attr> attr, int defaultValue) throws NotExistException, WrongTypeException, IOException {
        if (attr.isPresent()) {

            return attr.get().getDimensionValue();
        } else {
            return defaultValue;
        }
    }

    /**
     * 获取 View 最大显示宽度
     * @return View 最大显示宽度
     */
    public int getMaxWidth() {
        return mMaxWidth;
    }

    /**
     * 设置 View 最大显示宽度
     * @param maxWidth View 最大显示宽度
     * @return {@link WidgetAttrs}
     */
    public WidgetAttrs setMaxWidth(int maxWidth) {
        this.mMaxWidth = maxWidth;
        return this;
    }

    /**
     * 获取 View 最大显示高度
     * @return View 最大显示高度
     */
    public int getMaxHeight() {
        return mMaxHeight;
    }

    /**
     * 设置 View 最大显示高度
     * @param maxHeight View 最大显示高度
     * @return {@link WidgetAttrs}
     */
    public WidgetAttrs setMaxHeight(int maxHeight) {
        this.mMaxHeight = maxHeight;
        return this;
    }

    /**
     * 是否允许滑动
     * @return {@code true} yes, {@code false} no
     */
    public boolean isSlide() {
        return mIsSlide;
    }

    /**
     * 设置是否允许滑动
     * @param isSlide {@code true} yes, {@code false} no
     * @return {@link WidgetAttrs}
     */
    public WidgetAttrs setSlide(boolean isSlide) {
        this.mIsSlide = isSlide;
        return this;
    }

    /**
     * 切换滑动控制状态
     * @return {@link WidgetAttrs}
     */
    public WidgetAttrs toggleSlide() {
        this.mIsSlide = !this.mIsSlide;
        return this;
    }


}
